const fs = require('fs');
const path = require('path');
const yaml = require('yaml');
const { program } = require('commander');
const Table = require('cli-table3');
const readline = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});

// 配置命令行参数：移除 index，强化 name 为核心筛选条件
program
  .requiredOption('-n, --name <name>', '项目中文名（必填，核心筛选条件）') // name 设为必填
  .option('-m, --manufacture <manufacture>', '厂商（可选，缩小筛选范围）')
  .option('-v, --version <version>', '版本号（可选，缩小筛选范围）')
  .option('-f, --force', '强制删除，不弹出确认提示（谨慎使用）');

// 解析命令行参数
program.parse(process.argv);
const options = program.opts();

// 读取记录文件
const yamlPath = path.join(__dirname, 'compresslist.yaml');
let records = [];

try {
  if (fs.existsSync(yamlPath)) {
    const yamlContent = fs.readFileSync(yamlPath, 'utf8');
    records = yaml.parse(yamlContent) || [];
  } else {
    console.log('没有找到记录文件，可能还没有任何记录。');
    readline.close();
    process.exit(0);
  }
} catch (error) {
  console.error('读取记录时出错：', error.message);
  readline.close();
  process.exit(1);
}

// 1. 筛选待删除记录：先按 name 精确匹配，再叠加厂商/版本号条件
const recordsToDelete = records.filter(record => {
  let match = record.name === options.name; // name 精确匹配（避免模糊匹配误删）
  // 若有厂商参数，叠加厂商匹配
  if (options.manufacture) match = match && (record.manufacture === options.manufacture);
  // 若有版本号参数，叠加版本号匹配
  if (options.version) match = match && (record.version === options.version);
  return match;
});

// 2. 处理筛选结果
if (recordsToDelete.length === 0) {
  console.log(`未找到匹配记录：
  - 项目名：${options.name}
  - 厂商：${options.manufacture || '未指定（任意厂商）'}
  - 版本号：${options.version || '未指定（任意版本）'}`);
  readline.close();
  process.exit(0);
}

// 3. 获取待删除记录在原数组中的索引（用于后续删除，避免索引偏移）
const indicesToDelete = recordsToDelete
  .map(targetRecord => records.findIndex(original => original === targetRecord))
  .sort((a, b) => b - a); // 从大到小排序，删除时不影响前面的索引

// 4. 展示待删除记录详情（含关键信息，帮助用户确认）
console.log('\n⚠️  待删除的记录：');
const deleteTable = new Table({
  head: [
    '序号', '项目名称', '厂商', '版本号',
    '更改后体积', '是否通过', '项目说明', '添加时间'
  ],
  colWidths: [6, 20, 10, 10, 12, 10, 30, 20] // 适配新增字段宽度
});

recordsToDelete.forEach((record, idx) => {
  deleteTable.push([
    idx + 1, // 序号从1开始（用户更易理解）
    record.name,
    record.manufacture,
    record.version,
    record.after,
    record.ispassed ? '是' : '否',
    record.comment || '无', // 显示项目说明
    new Date(record.addtime).toLocaleString() // 格式化时间戳
  ]);
});
console.log(deleteTable.toString());

// 5. 确认删除（除非使用 -f 强制删除）
if (options.force) {
  readline.close();
  performDelete();
} else {
  readline.question(`\n确定要删除这 ${recordsToDelete.length} 条记录吗？(y/N) `, (answer) => {
    readline.close();
    // 仅当输入 y/yes 时执行删除
    if (!['y', 'yes'].includes(answer.toLowerCase())) {
      console.log('✅ 删除操作已取消。');
      process.exit(0);
    }
    performDelete();
  });
}

// 核心删除逻辑
function performDelete() {
  try {
    // 执行删除（按排序后的索引删除，避免偏移）
    indicesToDelete.forEach(index => records.splice(index, 1));
    // 写入更新后的记录到 YAML 文件
    const yamlContent = yaml.stringify(records);
    fs.writeFileSync(yamlPath, yamlContent, 'utf8');
    console.log(`\n✅ 成功删除 ${recordsToDelete.length} 条记录！`);
  } catch (error) {
    console.error('\n❌ 写入记录时出错：', error.message);
    process.exit(1);
  }
}